Record Shader

Record Shader

👹

名词解释

  • 裁剪空间
    • 就是相机朝向视锥体的范围 从 near 到 far

流水线

msedge_XSs0NV9RCN.png

  • 应用阶段 ↓ 输出渲染图元

    • cpu把数据加载到显存中
    • 设置渲染状态
    • draw call(命令缓冲区的一个命令)
  • 几何阶段 ↓ 输出屏幕空间

  • 光栅化阶段

Shader结构

  • Properties
    • 数据类型
      • Int
      • Float
      • Range(float,float)
      • Color(R,G,B,A)
      • Vertex(X,Y,Z,W)
    • 纹理类型
      • 2D
      • Cube
      • 3D

基本结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Shader "Custom/MyShader" 
//此处用于指定你的着色器的名称以及在Shader的下栏菜单中的位置
//注意不要和其他的着色器同名。
{
Properties{
//着色器的输入,说白了,这里缩写的内容都会显示到材质面板上
//如果有一些参数要留给用户去调整,都要写在这里,比如材质的纹理等
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0

}
SubShader{
/*子着色器,每个子着色器都是一个完整的功能模块,
只不过他们应对不同的显卡,有任何一个子着色器可用
该着色器就是可用的,如果所有的着色器都不可用,
则Unity会使用Fallback指定的系统着色器来进行着色器
如果你不指定任何Fallback且所有的子着色器都失效了
那么该物体的渲染就会失效*/
Tags
{
"RenderType"="Opaque"
//标签指示着色器只渲染不透明的物体
}
LOD 100
// 渲染级别比较高
pass{
/*每个子着色器中的pass块都要执行一遍
拿锻造一柄剑来说,一个pass就像是一道加工工艺
加工工艺越多,该着色器要处理的任务也就越多
当所有的pass都完成了,我们就可以得到一柄剑了。
*/
CGPROGRAM
//这里是真正的着色器代码所需要编写的地方,
//ShaderLab支持CG语法和GLSL语法,当然,仅仅是“语法”
//其本质还是ShaderLab,如果你要使用GLSL来编写着色器
//则使用GLSLPROGRAM和ENDGLSL语法块来定义
ENDCG
}
}
SubShader{
//针对显卡B的着色器
}
Fallback"Diffuse"
//如果上述所有的显卡都不管用,那我们就
//使用UnityShader自带的Diffuse来进行渲染
}

Properties内支持的属性类型

  • v2-d9ec71236ac0b5358b317ee125d97227_720w.webp
  • 记住每句话结尾不用加;

v2-fcfb07715ecff9e5f30d6594cff18a19_720w.webp

常用函数

  • smoothstep(f1,f2,x)
    • 如果x<f1,返回0
    • 如果x>f2,返回1
    • 可以在f1和f2之间形成颜色平滑过渡

画一个圆圈

Unity_Dwnn47EPlG.png

  • 名词解释
    • msedge_abU0Bd9C9o.png
  • 1 - step函数是用来找补集,而length是半径(大概是这个意思)
    • Aseprite_TU7yvSYNVj.png
  • 为什么color要乘以incircle呢
    • 这是因为 inCircle 是一个 0 或 1 的值。
    • 当片元在圆内时,inCircle 为 1,此时color = fixed3(1,1,0) * 1 = fixed3(1,1,0)。所以 color 保持黄色。
    • 当片元在圆外时,inCircle 为 0,此时color = fixed3(1,1,0) * 0 = fixed3(0,0,0)。所以 color 变成黑色。
    • 通过与 inCircle 相乘,我们实现了一种条件选择的效果。
作者

发布于

2023-05-20

更新于

2023-06-13

许可协议